package com.simon.cdc.sql;


import com.simon.cdc.event.ChangeEvent;

/**
 * SQL语句生成工厂
 */
public final class SQLQueryBuilder {

    /**
     * 根据变更事件构建相应的SQL语句
     * <p>
     * 此方法根据传入的变更事件的类型，选择性地构建并返回相应的SQL语句对象
     * 它通过事件的操作类型来决定构建哪种类型的SQL语句对象
     * 如果操作类型不受支持，则抛出异常
     *
     * @param event 变更事件，包含操作类型和操作所需的数据
     * @return 根据操作类型构建的SQL语句字符串
     * @throws UnsupportedOperationException 如果变更事件的操作类型不受支持
     */
    public static String build(ChangeEvent event) {
        // 根据变更事件的操作类型，选择相应的SQL语句构建逻辑
        return switch (event.getOperationType()) {
            case INSERT, READ -> new InsertStatement(event).build();
            case UPDATE -> new UpdateStatement(event).build();
            case DELETE -> new DeleteStatement(event).build();
            default -> throw new UnsupportedOperationException(
                    "Unsupported operation type: " + event.getOperationType());
        };
    }
}